//
//  StatusPictureView.swift
//  SinaWeibo25
//
//  Created by Apple on 16/3/11.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

private let picturCellId = "picturCellId"

private let picturCellMargin: CGFloat = 5
class StatusPictureView: UICollectionView {
    
    //集合视图显示图片数据源 + 获取图片的数量
    var imageURLs: [NSURL]? {
        didSet {
            //1.根据配图的数量 计算配图视图的大小
            let pSize = calculatePictureViewSize()
            //更新约束
            self.snp_updateConstraints { (make) -> Void in
                make.size.equalTo(pSize)
            }
            
            //设置测试文字
            testLabel.text = "\(imageURLs?.count ?? 0)"
            //2.刷新集合视图
            reloadData()
        }
    }
    //重写构造方法
    init() {
        //必须调用指定的构造函数
        //布局对象 必须是  '流水'布局对象
        let layout = UICollectionViewFlowLayout()
        //设置最小间距
        layout.minimumInteritemSpacing = picturCellMargin
        layout.minimumLineSpacing = picturCellMargin

        super.init(frame: CGRectZero, collectionViewLayout: layout)
        //注册可cell和可重用标识符
        self.registerClass(PictureCell.self, forCellWithReuseIdentifier: picturCellId)
        //设置数据源
        self.dataSource = self
        self.backgroundColor = UIColor.whiteColor()
                //设置UI
        setupUI()
    }
    
    //默认实现报错
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    
    
    /*
    1.没有图片 就没有大小
    2.单张图片  就给定图片原尺寸显示  同时还需要设置itemSize
    3.4张图片 2 * 2 方式来显示
    4.其他多张图片  3 * n
    */
    private func calculatePictureViewSize() -> CGSize {
        let imageCount = imageURLs?.count ?? 0
        let maxWidth = ScreenWidth - 2 * StatusCellMargin
        let itemWidth = (maxWidth - 2 * picturCellMargin) / 3
        
        //如何获取layout对象
        let layout = self.collectionViewLayout as! UICollectionViewFlowLayout
        //设置itemSize
        layout.itemSize = CGSizeMake(itemWidth, itemWidth)
        if imageCount == 0 {
            return CGSizeZero
        }
        
        if imageCount == 1 {
            //给定图片远尺寸大小
            //TODO:  比较困难 后续完善 线给定 固定大小
            let imageSize = CGSizeMake(150, 100)
            layout.itemSize = imageSize
            return imageSize
        }
        
        if imageCount == 4 {
            //计算配图大小  2 * itemSize.width + margin
            let w = itemWidth * 2 + picturCellMargin
            return CGSizeMake(w, w)
        }
        
        //其他多张图片
        //确定行数  根据图片数量确定有多少行
        /*
        1,2,3   -> 1
        4,5,6   -> 2
        7,8,9   -> 3
        */
        let row = CGFloat((imageCount - 1) / 3 + 1)
        let pHeight = row * itemWidth + (row - 1) * picturCellMargin
        
        
        return CGSizeMake(maxWidth, pHeight)
    }
    
    //MARK: 设置UI界面
    private func setupUI() {
        addSubview(testLabel)
        testLabel.snp_makeConstraints { (make) -> Void in
            make.center.equalTo(self.center)
        }
    }
    
    
    private lazy var testLabel: UILabel = UIFactory.labelFactory("", textColor: UIColor.redColor(), fontSize: 40)
    
    
    //MARK: 懒加载子视图
//    private lazy var
}


//数据源协议
extension StatusPictureView: UICollectionViewDataSource {
    func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        return imageURLs?.count ?? 0
    }
    
    func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(picturCellId, forIndexPath: indexPath) as! PictureCell
        
//        //设置测试颜色
//        cell.backgroundColor = indexPath.item % 2 == 0 ? UIColor.redColor() : UIColor.greenColor()
        
        //绑定数据
        cell.imageURL = imageURLs![indexPath.item]
        return cell
    }
    
}



class PictureCell: UICollectionViewCell {
    
    var imageURL: NSURL? {
        didSet {
            iconView.sd_setImageWithURL(imageURL)
        }
    }
    
    
    //重写构造方法
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    
    //默认实现报错
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //MARK: 设置UI界面
    private func setupUI() {
        contentView.addSubview(iconView)
        //设置约束
        iconView.snp_makeConstraints { (make) -> Void in
            make.edges.equalTo(contentView.snp_edges)
        }
    }
    
    
    //MARK: 懒加载子视图
    //视图显示模式
    private lazy var iconView: UIImageView = {
        let iv = UIImageView()
        
        //视图默认显示模式是  ScaleToFill  -> 放大或者缩小图片全部部分 进行填充显示   -> 如果图片的比例 和 视图的比例不一致 图片会失真
        //ScaleAspectFit  -> 放大 或者 缩小部分 进行 适应的显示模式   -> 图片原有的比例 不变  等比缩小和方法 进行适应   -> 会导致图片上下左右可能留白
        //ScaleAspectFill  -> 放大或者缩小局部  进行填充显示  -> 图片原有的比例 不会产生变化,同时 上下左右不会留白   -> 视图可能被裁剪
        iv.contentMode = .ScaleAspectFill
        
        //在sb / xib iamgeView 是默认设置了裁剪 ,但是手写代码  需要手动设置裁剪
        //手动设置裁剪
        iv.clipsToBounds = true
        return iv
    }()
}
